The success of a data-storage system depends, to a great extent, on its ability to reliably read and write large amounts of data very quickly. To do so, the data-storage system is often called upon to perform several tasks, each of which can be performed using any one of several different algorithms.
Configuring a data-storage system typically includes selecting, for each task that the data-storage system is called upon to perform, a particular algorithm for performing that task. In some cases, the algorithm is selected, in part, on the basis of the manner in which the data-storage system is expected to be used. In other cases, the algorithm is simply a default algorithm.
Once the data-storage system has been configured, it becomes difficult to confirm that the algorithm selected for a particular task is truly the best choice for that task. Although it is possible to determine how well the chosen algorithm has performed over a specified interval, this is not enough. It is always possible that another algorithm, had it been executing during that same interval, would have done better.
One approach to comparing the performance of two algorithms is to allow the first algorithm to operate during a first interval and then to allow the second algorithm to operate during a second interval. There are several flaws in this approach. First, the usage patterns of the data-storage system, upon which the performance depends, may differ during the first and second intervals. Second, this approach rapidly becomes more time-consuming as more algorithms are compared. Third, it is inconvenient to have to reconfigure the data-storage system simply to test other algorithms.
Because of the difficulty associated with comparing the performances of different algorithms, many data storage systems are needlessly crippled by algorithms that are inappropriate for their usage patterns.